/**
* Copyright 2008-2016 Qualogy Solutions B.V.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.qualogy.qafe.jaxrs;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Singleton;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.GenericEntity;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
import org.glassfish.hk2.utilities.binding.AbstractBinder;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.Test;
import com.qualogy.qafe.bind.business.action.BusinessAction;
import com.qualogy.qafe.bind.commons.type.Parameter;
import com.qualogy.qafe.bind.core.application.ApplicationContext;
import com.qualogy.qafe.bind.core.application.ApplicationIdentifier;
import com.qualogy.qafe.businessaction.BusinessActionHandler;
import com.qualogy.qafe.businessaction.exception.ApplicationNotFoundException;
import com.qualogy.qafe.businessaction.exception.BusinessActionInvokeException;
import com.qualogy.qafe.businessaction.exception.BusinessActionNotFoundException;
import com.qualogy.qafe.businessaction.impl.ApplicationBean;
import com.qualogy.qafe.businessaction.impl.BusinessActionBean;
import com.qualogy.qafe.businessaction.impl.BusinessActionParameterBean;
import com.qualogy.qafe.jaxrs.businessaction.BusinessActionResource;
import com.qualogy.qafe.jaxrs.businessaction.ParameterMessageBodyReaderWriter;
/**
* REST API tests.
*
* @author sdahlberg
*
*/
public final class BusinessActionRestTest extends JerseyTest {
//@formatter:off
private final GenericType<List<ApplicationBean>> listOfApps = new GenericType<List<ApplicationBean>>() {};
private final GenericType<List<BusinessActionBean>> listOfActions =
new GenericType<List<BusinessActionBean>>() {};
private final GenericType<List<BusinessActionParameterBean>> listOfParameters =
new GenericType<List<BusinessActionParameterBean>>() {};
//@formatter:on
@Override
protected Application configure() {
final ResourceConfig resourceConfig = new ResourceConfig(BusinessActionResource.class);
resourceConfig.register(new AbstractBinder() {
@Override
protected void configure() {
bind(new TestBusinessActionHandler()).to(BusinessActionHandler.class);
}
});
resourceConfig.register(ParameterMessageBodyReaderWriter.class);
return resourceConfig;
}
@Override
protected void configureClient(ClientConfig config) {
super.configureClient(config);
config.register(ParameterMessageBodyReaderWriter.class);
}
@Test
public void requestApplications() {
final List<ApplicationBean> applications = target("applications").request().get(listOfApps);
assertEquals("myappid", applications.get(0).getApplicationId());
}
@Test
public void requestBusinessActions() {
final List<BusinessActionBean> actions =
target("applications/myappid/businessactions").request().get(listOfActions);
assertEquals("myactionid", actions.get(0).getBusinessActionId());
}
@Test
public void invokeBusinessAction() {
final List<BusinessActionParameterBean> parameters = new ArrayList<BusinessActionParameterBean>();
final BusinessActionParameterBean parameterBean = new BusinessActionParameterBean();
parameterBean.setKey("mykey");
parameterBean.setValue("myValue");
parameters.add(parameterBean);
final GenericEntity<List<BusinessActionParameterBean>> genericEntity =
new GenericEntity<List<BusinessActionParameterBean>>(parameters, listOfParameters.getType());
final Entity<GenericEntity<List<BusinessActionParameterBean>>> entity =
Entity.entity(genericEntity, MediaType.APPLICATION_JSON);
final List<BusinessActionParameterBean> outputParameters =
target("applications/myappid/businessactions/myactionid").request()
.post(entity, listOfParameters);
assertEquals("output", outputParameters.get(0).getKey());
assertEquals("success", outputParameters.get(0).getValue());
}
@Singleton
private static class TestBusinessActionHandler implements BusinessActionHandler {
@Override
public List<ApplicationContext> getApplicationContexts() {
try {
return Arrays.asList(getApplicationContext("myappid"));
} catch (ApplicationNotFoundException e) {
return Collections.emptyList();
}
}
@Override
public List<BusinessAction> getBusinessActions(final ApplicationContext context) {
try {
BusinessAction businessAction = getBusinessAction(context, "myactionid");
return Arrays.asList(businessAction);
} catch (BusinessActionNotFoundException e) {
return Collections.emptyList();
}
}
@Override
public BusinessAction getBusinessAction(final ApplicationContext context,
final String businessActionId) throws BusinessActionNotFoundException {
if (context.getId().stringValueOf().equals("myappid") && "myactionid".equals(businessActionId)) {
return new BusinessAction("myactionid");
}
return null;
}
@Override
public ApplicationContext getApplicationContext(final String applicationId)
throws ApplicationNotFoundException {
if ("myappid".equals(applicationId)) {
ApplicationContext applicationContext = new ApplicationContext();
applicationContext.setId(new ApplicationIdentifier("myappid"));
return applicationContext;
}
return null;
}
@Override
public List<Parameter> getInputParameters(final BusinessAction businessAction) {
final List<Parameter> parameters = new ArrayList<Parameter>();
parameters.add(new Parameter("hoeba"));
return parameters;
}
@Override
public Map<String, Object> invokeBusinessAction(final ApplicationContext context,
final BusinessAction businessAction, final List<BusinessActionParameterBean> input)
throws BusinessActionInvokeException {
if ("myappid".equals(context.getId().stringValueOf())
&& "myactionid".equals(businessAction.getId())) {
final Map<String, Object> output = new HashMap<String, Object>();
output.put("output", "success");
return output;
}
return Collections.emptyMap();
}
}
}